In many computing environments, application workloads access shared storage systems, such as block storage provided by a SAN-based storage array, or file storage provided by a NAS-based file server. For example, virtualized datacenters typically consolidate many virtual disks, associated with heterogeneous virtual machine (VM) workloads, onto a small number of shared, networked storage servers. See, for example, Ajay Gulati, Ganesha Shanmuganathan, Irfan Ahmad, Carl A. Waldspurger, and Mustafa Uysal, “Pesto: Online Storage Performance Management in Virtualized Datacenters”, Proceedings of the Second ACM Symposium on Cloud Computing (SOCC '11), Cascais, Portugal, October 2011 (“PESTO”). Such consolidation helps reduce costs by utilizing storage devices more efficiently. By enabling virtual disks to be accessed remotely, a network-based storage system also facilitates live migration of VMs across hosts.
Unfortunately, storage clients commonly exhibit complex I/O behavior, with bursty I/O workloads and I/O locality patterns that may vary significantly over time. Virtualized environments can be especially complicated, with a diverse set of mixed workloads sharing a collection of heterogeneous storage devices. Since I/O performance is complex and dynamic, it is very challenging to identify and understand the causes of performance problems, such as contention for shared storage devices. This makes it extremely difficult for system administrators to provision, partition, and manage storage to meet application workload demands.
Ideally, what is desired is an automated method that can identify periods of storage contention, and which can analyze the interactions between client workloads during such periods. Contention analysis can help inform both system administrators and automated storage management tools, enabling them to optimize workload placement and to improve other storage management decisions.